# 特殊方法和运算符重载

## 特殊方法

| 方法                  | 说明       | 举例                     |
| --------------------- | ---------- | ------------------------ |
| `__init__`            | 构造方法   | 对象初始化：`f = Foo()`  |
| `__del__`             | 析构方法   | 对象回收：GC 或调用`del` |
| `__repr__`、`__str__` | 打印、转换 | `print(obj)`             |
| `__call__`            | 函数调用   | `obj()`                  |
| `__getattr__`         | 点运算符   | `obj.foo`                |
| `__setattr__`         | 属性赋值   | `obj.foo = bar`          |
| `__getitem__`         | 索引运算   | `obj[key]`               |
| `__setitem__`         | 索引运算   | `obj[key] = bar`         |
| `__len__`             | 长度       | `len(obj)`               |

## 运算符重载

| 运算符                 | 方法                                                   |
| ---------------------- | ------------------------------------------------------ |
| `+`                    | `__add__`                                              |
| `-`                    | `__sub__`                                              |
| `<`、`<=`、 `==`       | `__lt__`、`__le__`、 `__eq__`                          |
| `>`、 `>=`、 `!=`      | `__gt__`、 `__ge__`、 `_ne__`                          |
| `\|` 、`^`、 `&`       | `__or__` 、`__xor__`、 `__and__`                       |
| `<<`、 `>>`            | `__lshift__`、 `__rshift__`                            |
| `*`、 `/` 、`%`、 `//` | `__mul__`、 `__truediv__`、 `__mod__`、 `__floordiv__` |
| `**`                   | `__pow__`                                              |
